#include "../8.3.2.Adjacency list/ljb.h"

int visited[M]; // 访问标志数组

/**
 * 图的深度优先遍历算法
 * @param {LinkedGraph}     g               图的邻接表存储结构
 * @param {int}             i               顶点下标
 * @return void
 */
void dfs(LinkedGraph g, int i)
{
    EdgeNode *p;
    // 访问顶点vi
    printf("visit vertex:%c \n", g.adjlist[i].vertex);
    visited[i] = 1;
    p = g.adjlist[i].Firstedge;
    while (p)
    {
        if (!visited[p->adjvex])
        {
            dfs(g, p->adjvex);
        }
        p = p->next;
    }
}

/**
 * 深度优先遍历图
 * @param {LinkedGraph}     g               图的邻接表存储结构
 * @return void
 */
void DFSTraverse(LinkedGraph g)
{
    int i;
    for (i = 0; i < g.n; i++)
    {
        visited[i] = 0;
    }
    for (i = 0; i < g.n; i++)
    {
        if (!visited[i])
        {
            dfs(g, i);
        }
    }
}